# coding: utf-8
"""	生成器
	生成器是迭代器中的一种, 但是你只能迭代一次, 原因很简单
	因为他们不是全部存在内存中, 只有调用他们的时候在内存中生成
"""

mygenerator = (x*x for x in range(3))

print mygenerator
for _ in mygenerator:
	print _

for _ in mygenerator:
	# 上一个for循环已经把生成器迭代完了, 现在生成器空了
	print _

def creat_generator():
	yield 1

gen = creat_generator()

for _ in gen:
	print _

for _ in gen:
	# 生成器被用完了
	print _


# 控制迭代器的穷尽
# 完一个银行的游戏

class Bank():
	crisis = False
	def create_atm(self):
		while not self.crisis:
			yield "$100"

hsbc = Bank()
corner_street_atm = hsbc.create_atm()
print corner_street_atm.next()
print corner_street_atm.next()
print corner_street_atm.next()
print corner_street_atm.next()
hsbc.crisis = True
try:
	print corner_street_atm.next()
except:
	print 'not money'

hsbc.crisis = False

try:
	print corner_street_atm.next()
except:
	print 'not money too...'

new_atm = hsbc.create_atm()

print [new_atm.next() for _ in range(5)]